package com.iwhalecloud.bss.kite.cucc.service.attr.handler;

import com.iwhalecloud.bss.kite.common.constant.KeyConsts;
import com.iwhalecloud.bss.kite.common.constant.ServiceOfferConsts;
import com.iwhalecloud.bss.kite.common.util.KiteBeanUtils;
import com.iwhalecloud.bss.kite.common.util.KiteStringUtils;
import com.iwhalecloud.bss.kite.cucc.common.constant.LocalKeyConsts;
import com.iwhalecloud.bss.kite.cucc.common.constant.LocalServiceOfferConsts;
import com.iwhalecloud.bss.kite.dataservice.cache.AttrValueCache;
import com.iwhalecloud.bss.kite.dataservice.entity.AttrValue;
import com.iwhalecloud.bss.kite.manager.api.IQuerySceneInstService;
import com.iwhalecloud.bss.kite.manager.inst.KiteAttr;
import com.iwhalecloud.bss.kite.manager.inst.KiteAttrValue;
import com.iwhalecloud.bss.kite.manager.inst.KiteInst;
import com.iwhalecloud.bss.kite.manager.inst.KiteSceneInst;
import com.iwhalecloud.bss.kite.service.attr.AttrData;
import com.iwhalecloud.bss.kite.service.attr.handler.AbstractAttrHandler;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.*;

/**
 * @Classname AccessModeAttrHandler
 * @Description 接入方式
 */
public class AccessModeAttrHandler extends AbstractAttrHandler {

    @Autowired
    private IQuerySceneInstService querySceneInstService;

    //    @Override
//    public void onShow(KiteAttr attr, KiteInst inst, AttrData data) {
//        super.onShow(attr, inst, data);
//        // 互联网类产品,接入方式属性在订单归集后的环节不允许再编辑
//        IQuerySceneInstService querySceneInstService = SpringUtil.getBean(IQuerySceneInstService.class);
//        String nodeCode = querySceneInstService.getExtParameterValue(data.getSceneInstId(), "nodeCode");
//        IOperateSceneInstService operateSceneInstService = SpringUtil.getBean(IOperateSceneInstService.class);
//        // app甩单补录、资源核查补录情况，可以编辑
//        String renderOrderType = querySceneInstService.getExtParameterValue(data.getSceneInstId(), "renderOrderType");
//        if (!KiteStringUtils.isEqual(attr.getFieldName(), "200001206") && !KiteStringUtils.isEmpty(nodeCode) && !KiteStringUtils.isEqual(renderOrderType, "orderRejection")) {
//            attr.setIsEdit(KeyConsts.IFTRUE_F);
//            operateSceneInstService.setAttr(data.getSceneInstId(), inst.getInstType(), inst.getInstId(), attr);
//        }
//    }

    @Override
    public void after(KiteAttr attr, KiteInst inst, AttrData data) {
        KiteSceneInst sceneInst = querySceneInstService.getSceneInst(data.getSceneInstId());
        String serviceOfferId = data.getServiceOfferId();
        // 广东个性化属性下拉值包含 100002888(OTN)，非广东的去掉，默认有该下拉值
        String provinceCode = sceneInst.getProvinceNbr();
        if (!LocalKeyConsts.PROVINCE_GUANGDONG.equals(provinceCode)) {
            attr.getAttrValues().removeIf(targetAttr -> KiteStringUtils.equals(targetAttr.getAttrValue(), "100002888"));
        }
        //福建个性需求
        if (LocalKeyConsts.PROVINCE_FUJIAN.equals(provinceCode)) {
            List<KiteAttrValue> attrValues = new ArrayList<>();
            Map<String, String> map = new HashMap<String, String>();
            KiteAttrValue attrValue0 = new KiteAttrValue();
            attrValue0.setAttrValue("");
            attrValue0.setAttrValueName("--请选择--");
            attrValue0.setSortBy("0");
            attrValues.add(0, attrValue0);
            //接入方式
            if ("2_0000066".equals(attr.getFieldName())) {
                map.put("110007637", "FTTH");
                map.put("1_0000360", "PON_LAN");
                map.put("100006847", "DIA");
                map.put("100006595", "UTN");
                map.put("100006849", "CNCNET");
                for (Map.Entry<String, String> entry : map.entrySet()) {
                    KiteAttrValue attrValue = new KiteAttrValue();
                    attrValue.setAttrValue(entry.getKey());
                    attrValue.setAttrId("20210313620");
                    attrValue.setAttrValueName(entry.getValue());
                    attrValues.add(attrValue);
                }
                attr.setDefaultValue("");
                attr.setIsNull(KeyConsts.IFTRUE_F);
                attr.setAttrValues(attrValues);
            }
            //业务子类型
            if ("200002072".equals(attr.getFieldName())) {
                map.put("100006841", "商务专线");
                map.put("100006848", "尊享专线");
                map.put("100006846", "智享专线");
                map.put("100006850", "国际精品网");
                for (Map.Entry<String, String> entry : map.entrySet()) {
                    KiteAttrValue attrValue = new KiteAttrValue();
                    attrValue.setAttrValue(entry.getKey());
                    attrValue.setAttrId("20210313608");
                    attrValue.setAttrValueName(entry.getValue());
                    attrValues.add(attrValue);
                }
                attr.setDefaultValue("");
                attr.setIsNull(KeyConsts.IFTRUE_T);
                attr.setAttrValues(attrValues);
            }
            if ("200001206".equals(attr.getFieldName())) {
                attr.setShowType("H");
                attr.setIsNull(KeyConsts.IFTRUE_F);
            }

        }else if(LocalKeyConsts.PROVINCE_ZHEJIANG.equals(provinceCode)) {
            //接入方式
            if ("2_0000066".equals(attr.getFieldName())) {
                List<KiteAttrValue> attrValues = new ArrayList<>();
                Map<String, String> map = new HashMap<String, String>();
                map.put("100005448", "传统语音接入");
                map.put("100005449", "PON接入（有配线）");
                map.put("100005450", "IAD接入");
                map.put("100005451", "AG接入");
                map.put("100005452", "PON接入（无配线）");
                map.put("100005453", "传统数据接入");
                map.put("100005454", "LAN交换机接入");
                map.put("100005455", "PON接入（光纤到户）");
                map.put("100005456", "WIFI无线宽带接入");
                for (Map.Entry<String, String> entry : map.entrySet()) {
                    KiteAttrValue attrValue = new KiteAttrValue();
                    attrValue.setAttrValue(entry.getKey());
                    attrValue.setAttrId("20210313620");
                    attrValue.setAttrValueName(entry.getValue());
                    attrValues.add(attrValue);
                }
                attr.setDefaultValue("100005448");
                attr.setValueDesc("传统语音接入");
                attr.setOriginValue("100005448");
                attr.setAttrValues(attrValues);
            }
            //业务子类型
            if ("200002072".equals(attr.getFieldName())) {
                List<KiteAttrValue> attrValues = new ArrayList<>();
                Map<String, String> map = new HashMap<String, String>();
                map.put("100003212", "普通互联网专线");
                map.put("100003213", "国际精品互联网专线");
                map.put("100003747", "智慧沃企（增强版）");
                map.put("100005457", "高清互动电视");
                for (Map.Entry<String, String> entry : map.entrySet()) {
                    KiteAttrValue attrValue = new KiteAttrValue();
                    attrValue.setAttrValue(entry.getKey());
                    attrValue.setAttrId("20210313608");
                    attrValue.setAttrValueName(entry.getValue());
                    attrValues.add(attrValue);
                }
                attr.setAttrValues(attrValues);
            }
            //定向宽带类型
            if (KiteStringUtils.equals(attr.getFieldName(), "210004548")) {
                attr.setShowType(KeyConsts.PROD_ATTR_SHOW_TYPE_E);
            }
            if (KiteStringUtils.equalsAny(attr.getFieldName(), "210004542", "210004543", "210004544", "210004545", "210004546")&& KiteStringUtils.equalsAny(serviceOfferId,"1","2826","1014")) {
                //浙江 是否新增设备、是否网管转人工、是否临时地址、是否名单制小区、是否一日通 调整为订单属性
                attr.setShowType("E");
                attr.setIsNull(KeyConsts.IFTRUE_F);
            }
            if (KiteStringUtils.equals(attr.getFieldName(), "210004547")) {
                attr.setShowType("D");
                attr.setIsNull(KeyConsts.IFTRUE_F);
            }
        }
        else if (LocalKeyConsts.PROVINCE_HEBEI.equals(provinceCode)) {
            List<KiteAttrValue> attrValues = new ArrayList<>();
            Map<String, String> map = new HashMap<String, String>();
            //接入方式
            if ("2_0000066".equals(attr.getFieldName())) {
                map.put("1_0000351", "MSTP");
                map.put("100002774", "光纤加光电转换器");
                map.put("100002811", "双绞线");
                map.put("1_0000203", "IPRAN");
                map.put("1_0000354", "FTTX");
                map.put("1_0000360", "PON_LAN");
                map.put("100002888", "OTN");
                map.put("100002773", "光纤直驱");
                map.put("110007637", "FTTH");
                for (Map.Entry<String, String> entry : map.entrySet()) {
                    KiteAttrValue attrValue = new KiteAttrValue();
                    attrValue.setAttrValue(entry.getKey());
                    attrValue.setAttrId("20210313620");
                    attrValue.setAttrValueName(entry.getValue());
                    attrValues.add(attrValue);
                }
                attr.setAttrValues(attrValues);
            }
            //业务子类型
            if ("200002072".equals(attr.getFieldName())) {
                map.put("100003212", "普通互联网专线");
                map.put("100003213", "国际精品互联网专线");
                for (Map.Entry<String, String> entry : map.entrySet()) {
                    KiteAttrValue attrValue = new KiteAttrValue();
                    attrValue.setAttrValue(entry.getKey());
                    attrValue.setAttrId("20210313608");
                    attrValue.setAttrValueName(entry.getValue());
                    attrValues.add(attrValue);
                }
                attr.setAttrValues(attrValues);
            }
        } else if (LocalKeyConsts.PROVINCE_GUANGDONG.equals(provinceCode)) {
            // 广东枚举值
            if ("2_0000066".equals(attr.getFieldName())) {
                List<AttrValue> attrValueList = AttrValueCache.get("20220215001");
                List<KiteAttrValue> kiteAttrValueList = KiteBeanUtils.copyPropsForList(attrValueList, KiteAttrValue.class);
                attr.setAttrId("20220215001");
                attr.setAttrValues(kiteAttrValueList);
            }
        }
        else {
            List<KiteAttrValue> attrValues = new ArrayList<>();
            Map<String, String> map = new HashMap<String, String>();
            //接入方式
            if ("2_0000066".equals(attr.getFieldName())) {
                map.put("1_0000351", "MSTP");
                map.put("100002774", "光纤加光电转换器");
                map.put("100002811", "双绞线");
                map.put("1_0000203", "IPRAN");
                map.put("1_0000354", "FTTX");
                map.put("1_0000360", "PON_LAN");
                map.put("100002888", "OTN");
                map.put("100002773", "光纤直驱");
                for (Map.Entry<String, String> entry : map.entrySet()) {
                    KiteAttrValue attrValue = new KiteAttrValue();
                    attrValue.setAttrValue(entry.getKey());
                    attrValue.setAttrId("20210313620");
                    attrValue.setAttrValueName(entry.getValue());
                    attrValues.add(attrValue);
                }
                attr.setAttrValues(attrValues);
            }
            //业务子类型
            if ("200002072".equals(attr.getFieldName())) {
                map.put("100003212", "普通互联网专线");
                map.put("100003213", "国际精品互联网专线");
                for (Map.Entry<String, String> entry : map.entrySet()) {
                    KiteAttrValue attrValue = new KiteAttrValue();
                    attrValue.setAttrValue(entry.getKey());
                    attrValue.setAttrId("20210313608");
                    attrValue.setAttrValueName(entry.getValue());
                    attrValues.add(attrValue);
                }
                attr.setAttrValues(attrValues);
            }
        }
        super.after(attr, inst, data);
    }

    @Override
    public void def(KiteAttr attr, KiteInst inst, AttrData data) {
        if(KiteStringUtils.isEqual(attr.getFieldName(), "2_0000066")) {
            String serviceOfferId = data.getServiceOfferId();
            if (KiteStringUtils.equalsAny(serviceOfferId,ServiceOfferConsts.SERVICE_OFFER_ORDER, LocalServiceOfferConsts.SERVICE_OFFER_RESOURCE_CHECK)) {
                KiteSceneInst sceneInst = querySceneInstService.getSceneInst(data.getSceneInstId());
                String provinceCode = sceneInst.getProvinceNbr();
                if (LocalKeyConsts.PROVINCE_GUANGDONG.equals(provinceCode)) {
                    // 广东 接入方式 默认值 MSTP（1_0000351）
                    attr.setDefaultValue("1_0000351");
                } else if (KiteStringUtils.equalsAny(provinceCode, LocalKeyConsts.PROVINCE_HENAN,LocalKeyConsts.PROVINCE_LIAONING,LocalKeyConsts.PROVINCE_JILIN)) {
                    // 辽宁、河南、吉林 接入方式 默认值 光纤加光电转换器（100002774）
                    attr.setDefaultValue("100002774");

                }
            }
        }
        super.def(attr, inst, data);
    }
}
